// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLCommentHint;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.Collections;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"

class SQLStartTransactionStatement_IsolationLevel
{
public:
  static SQLStartTransactionStatement_IsolationLevel_ptr SERIALIZABLE;
  static SQLStartTransactionStatement_IsolationLevel_ptr REPEATABLE_READ;
  static SQLStartTransactionStatement_IsolationLevel_ptr READ_COMMITTED;
  static SQLStartTransactionStatement_IsolationLevel_ptr READ_UNCOMMITTED;

  string_ptr text;

  SQLStartTransactionStatement_IsolationLevel(string_ptr text);

  string_ptr getText();
};

class SQLStartTransactionStatement : virtual public SQLStatementImpl
{
public:
  BOOL_ptr consistentSnapshot;

  BOOL_ptr begin;
  BOOL_ptr work;
  SQLExpr_ptr name;

  SQLCommentHint_list_ptr hints;

  SQLStartTransactionStatement_IsolationLevel_ptr isolationLevel;
  BOOL_ptr readOnly;

  SQLStartTransactionStatement();

  SQLStartTransactionStatement(DbType_ptr dbType);
  SHAREDOBJECT(SQLStartTransactionStatement);

  BOOL_ptr isConsistentSnapshot();

  void setConsistentSnapshot(BOOL_ptr consistentSnapshot);

  BOOL_ptr isBegin();

  void setBegin(BOOL_ptr begin);

  BOOL_ptr isWork();

  void setWork(BOOL_ptr work);

  SQLStartTransactionStatement_IsolationLevel_ptr getIsolationLevel();

  void setIsolationLevel(SQLStartTransactionStatement_IsolationLevel_ptr isolationLevel);

  void accept0(SQLASTVisitor_ptr visitor);

  SQLCommentHint_list_ptr getHints();

  void setHints(SQLCommentHint_list_ptr hints);

  SQLExpr_ptr getName();

  void setName(SQLExpr_ptr name);

  // @Override
  SQLObject_list_ptr getChildren();

  BOOL_ptr isReadOnly();

  void setReadOnly(BOOL_ptr readOnly);
};
